﻿using ClassMySQL.Classes;
using Library.Classes;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace Library.Windows
{
    /// <summary>
    /// Логика взаимодействия для Genres.xaml
    /// </summary>
    public partial class Genres : Window, INotifyPropertyChanged
    {
        private bool _editMode = false;
        private static int _id = 0;
        public Genres()
        {
            InitializeComponent();
            listGenres.ItemsSource = LoadGenres();
        }

        public event PropertyChangedEventHandler? PropertyChanged;

        public void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }

        private static List<Genre>? LoadGenres()
        {
            DataTable dt = ServerMySQL.GetDataTable("genre");
            List<Genre> genres = new List<Genre>();
            if (dt.Rows.Count != 0)
            {
                foreach (DataRow row in dt.Rows)
                {
                    Genre genreName = new Genre(
                        id: Convert.ToInt32(row[0]),
                        genre: row[1].ToString()
                        );
                    genres.Add(genreName);
                }
            }
            return genres;
        }

        private void addGenre_Click(object sender, RoutedEventArgs e)
        {
            if (genre.Text == string.Empty)
            {
                MessageBox.Show("Укажите жанр", "Заполните обязательные поля",
                    MessageBoxButton.OK, MessageBoxImage.Warning);
                return;
            }
            Genre genreName = new Genre(
                id: _id,
                genre: genre.Text
                );
            if (_editMode)
            {
                if (SendToServer.EditGenre(genreName))
                {
                    ClearText();
                    UpdateUi();
                    _editMode = false;
                }
                else
                {
                    MessageBox.Show("Ошибка записи", "Неудача",
                        MessageBoxButton.OK, MessageBoxImage.Error);
                }
            }
            else
            {
                if (SendToServer.AddGenre(genreName))
                {
                    ClearText();
                }
                else
                {
                    MessageBox.Show("Ошибка записи", "Неудача",
                        MessageBoxButton.OK, MessageBoxImage.Error);
                }
            }

            listGenres.ItemsSource = LoadGenres();
        }
        private void ClearText()
        {
            // Очистка полей ввода (если запись была успешной)
            genre.Clear();
        }

        private void UpdateUi()
        {
            GroupHeader.Header = "Добавление нового жанра";
            addGenre.Content = "Добавить жанр";
        }
        private void listGenres_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (listGenres.SelectedItems.Count > 0)
            {
                Genre? genreName = listGenres.SelectedItem as Genre;
            }
        }

        private void ChangeRow_Click(object sender, RoutedEventArgs e)
        {
            if (listGenres.SelectedItems.Count > 0)
            {
                _editMode = true;   // Установка режима редактирования

                GroupHeader.Header = "Обновить данные жанра";
                addGenre.Content = "Обновить данные";
                Genre? genreName = listGenres.SelectedItem as Genre;
                genre.Text = genreName.GenreName;

                // Получаем идентификатор (id) выделенного автора
                _id = genreName.Id;
            }
        }
    }
}
